package com.itwlj.service.impl;

import com.itwlj.dto.SkuDTO;
import com.itwlj.entity.Sku;
import com.itwlj.entity.SkuSpec;
import com.itwlj.mapper.SkuMapper;
import com.itwlj.service.SkuService;
import com.itwlj.vo.SkuVO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;

/**
 * sku业务层
 */
@Service
public class SkuServiceImpl implements SkuService {

    @Autowired
    private SkuMapper skuMapper;

    /**
     * 新增sku
     *
     * @param skuDTO
     */
    @Transactional
    public void insert(SkuDTO skuDTO) {
        Sku sku = new Sku();
        BeanUtils.copyProperties(skuDTO, sku);
        skuMapper.insert(sku);

        List<SkuSpec> skuSpecList = skuDTO.getSkuSpecList();
        skuSpecList.forEach(skuSpec -> {
            skuSpec.setSkuId(sku.getId());
            skuMapper.insertSpec(skuSpec);
        });
    }

    /**
     * 根据商品id查询sku
     *
     * @param goodsId
     * @return
     */
    public List<SkuVO> getByGoodsId(Long goodsId) {

        List<SkuVO> skuVOList = new ArrayList<>();
        List<Sku> skuList = skuMapper.getByGoodId(goodsId);
        skuList.forEach(sku -> {
            SkuVO skuVO = new SkuVO();
            BeanUtils.copyProperties(sku, skuVO);
            skuVO.setSkuSpecList(skuMapper.getSkuSpecs(sku.getId()));
            skuVOList.add(skuVO);
        });
        return skuVOList;
    }

    /**
     * 根据id删除sku
     *
     * @param id
     */
    public void deleteById(Long id) {
        skuMapper.deleteById(id);
        skuMapper.deleteSpec(id);
    }

    /**
     * 根据id修改sku
     *
     * @param skuDTO
     */
    public void update(SkuDTO skuDTO) {
        Sku sku = new Sku();
        BeanUtils.copyProperties(skuDTO, sku);
        skuMapper.update(sku);

        //删除规格
        skuMapper.deleteSpec(skuDTO.getId());
        //新增规格
        List<SkuSpec> skuSpecList = skuDTO.getSkuSpecList();
        skuSpecList.forEach(skuSpec -> {
            skuSpec.setSkuId(skuDTO.getId());
            skuMapper.insertSpec(skuSpec);
        });
    }

    /**
     * 根据id查询sku
     *
     * @param id
     * @return
     */
    public SkuVO getById(Long id) {
        Sku sku = skuMapper.getById(id);
        SkuVO skuVO = SkuVO.builder()
                .id(sku.getId())
                .goodsId(sku.getGoodsId())
                .price(sku.getPrice())
                .picture(sku.getPicture())
                .skuSpecList(skuMapper.getSkuSpecs(sku.getId()))
                .build();

        return skuVO;
    }

    /**
     * 扣减库存
     *
     * @param id
     * @param count
     * @return
     */
    public void deductInventory(Long id, Long count) {
        skuMapper.deductInventory(id,count);
    }

    /**库存
     * 回滚
     *
     * @param id
     * @param count
     * @return
     */
    public void backInventory(Long id, Long count) {
        skuMapper.backInventory(id,count);
    }


}
